隨著時間的資料量成長,如何免去手工、使用自動化進行過期資料清理與儲存成本控制,成為大型數據系統設計中不可忽視的一環。ClickHouse 提供了 TTL(Time To Live)資料清理機制,不僅能自動刪除過期資料,還能將資料移動至冷儲存 (如 S3、HDD),有效降低儲存成本。
TTL (Time To Live) 是指設定資料的「生命週期」,當資料達到指定條件時,ClickHouse 會自動進行清理(刪除)或儲存層級移動 (Move to Volume)。
TTL 可以套用在:
CREATE TABLE events
(
EventDate DateTime,
UserID UInt64,
Action String
) ENGINE = MergeTree
PARTITION BY toYYYYMM(EventDate)
ORDER BY (UserID, EventDate)
TTL EventDate + INTERVAL 7 DAY;
這會讓資料在 EventDate
超過 7 天後,自動被清除。
CREATE TABLE logs
(
EventDate DateTime,
UserID UInt64,
Action String,
TempField String TTL EventDate + INTERVAL 1 DAY
) ENGINE = MergeTree
ORDER BY UserID;
TempField
欄位資料會在 1 天後被清除,但行資料仍會保留。
// config.xml
<storage_configuration>
<disks>
<disk_ssd>
<path>/var/lib/clickhouse/ssd/</path>
</disk_ssd>
<disk_hdd>
<path>/var/lib/clickhouse/hdd/</path>
</disk_hdd>
</disks>
<policies>
<tiered_policy>
<volumes>
<hot>
<disk>disk_ssd</disk>
</hot>
<cold>
<disk>disk_hdd</disk>
<max_data_part_size_bytes>5000000000</max_data_part_size_bytes>
</cold>
</volumes>
</tiered_policy>
</policies>
</storage_configuration>
CREATE TABLE events_tiered
(
EventDate DateTime,
UserID UInt64,
Action String
) ENGINE = MergeTree
ORDER BY (UserID, EventDate)
SETTINGS storage_policy = 'tiered_policy'
TTL EventDate + INTERVAL 7 DAY TO VOLUME 'cold';
觸發時機 | 說明 |
---|---|
背景合併 (Merge) | TTL 清理與 Volume 移動是在 Merge 階段一併處理。 |
ALTER TABLE FREEZE | 可以手動強制觸發。 |
清理非即時性 | TTL 並非即時刪除,取決於背景合併頻率與資源情況。 |
建議:
CREATE TABLE user_behavior
(
EventDate DateTime,
UserID UInt64,
Action String
) ENGINE = MergeTree
ORDER BY (UserID, EventDate)
TTL EventDate + INTERVAL 7 DAY;
CREATE TABLE logs_tiered
(
EventDate DateTime,
LogID UUID,
Details String
) ENGINE = MergeTree
ORDER BY (LogID, EventDate)
SETTINGS storage_policy = 'tiered_policy'
TTL EventDate + INTERVAL 3 DAY TO VOLUME 'cold';
SELECT table, partition_id, min(min_ttl), min(max_ttl)
FROM system.parts
WHERE active = 1
GROUP BY table, partition_id;
OPTIMIZE TABLE events FINAL;
system.part_log
):
SELECT * FROM system.part_log WHERE event_type = 'MergeParts' AND table = 'events';
TTL 不只是過期資料清理,更是控制 ClickHouse 儲存資源分層 (SSD → HDD → S3) 的重要利器。適當設計 TTL 策略,能幫助你在效能與成本之間取得最佳平衡。(老闆也會很愛你的)